package com.lry.basic.algorithm.common;
/*
给定一个只包含三种字符的字符串：（ ，） 和 *，写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则：

    任何左括号 ( 必须有相应的右括号 )。
    任何右括号 ) 必须有相应的左括号 ( 。
    左括号 ( 必须在对应的右括号之前 )。
    * 可以被视为单个右括号 ) ，或单个左括号 ( ，或一个空字符串。
    一个空字符串也被视为有效字符串。

 */
public class CheckValidString {
    public static boolean checkValidString(String s) {
        if(null==s||s.length()==0)
            return true;
        int left=0,right=0,star=0;
        char[]cs = s.toCharArray();
        for(int i=0;i<s.length();i++){
            if(cs[i]=='('){
                left++;
            }else if(cs[i]==')'){
                if(left>0){
                    left--;
                }else if(star>0){
                    star--;
                }else{
                    return false;
                }
            }else if(cs[i]=='*'){
                star++;
            }else{
                return false;
            }
        }
        left=0;star=0;
        for(int i=s.length()-1;i>=0;i--){
            if(cs[i]==')'){
                right++;
            }else if(cs[i]=='('){
                if(right>0){
                    right--;
                }else if(star>0){
                    star--;
                }else{
                    return false;
                }
            }else if(cs[i]=='*'){
                star++;
            }else{
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(checkValidString("(*()"));
    }
}
